/// \file sampling.hh
/// \brief Random sample generation.

#ifndef SAMPLING_HH
#define SAMPLING_HH

#include <cgmath/cgmath.hh>

/// Generate cosine-weighted random sample from  unit hemisphere z > 0.
cgmath::vector_3d lambert_sample (void);

/// Generate phong sample (importance sampling)
cgmath::vector_3d phong_sample (double ns);

/// Generate a uniform sample on unit disk centered at origin.
cgmath::vector_3d lens_sample (void);

/// Generate a mirror sample (reflected ray)
cgmath::vector_3d mirror_sample (cgmath::vector_3d normal,
                                 cgmath::vector_3d out_dir);

#endif
